package com.tea.zxql.controller.user;

import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.util.SaResult;
import com.tea.zxql.domain.dto.LoginDTO;
import com.tea.zxql.domain.vo.UserInfoVO;
import com.tea.zxql.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @ClassDescription:
 * @ClassName: UserController
 * @JdkVersion: 17
 * @Author: HYC
 * @Created: 2025/7/30 16:15
 * @Version 1.0
 */
/**
 * 用户角色控制器
 * 处理用户登录、退出登录和获取用户信息等操作
 */
@Tag(name = "用户角色管理")
@RestController
@RequestMapping("/userRole")
public class UserController {


    private static final Logger log = LoggerFactory.getLogger(UserController.class);
    @Autowired
    private UserService userService;


    /**
     * 用户登录接口
     * @param logInDTO 登录参数对象，包含用户名和密码等信息
     * @return SaResult 返回登录结果，数据部分为生成的token
     */
    @Operation(summary = "用户登录")
    @PostMapping("/login")
    public SaResult login(@RequestBody LoginDTO logInDTO) {


        log.info("用户登录开始");
        log.info("用户登录参数：{}", logInDTO);

        String token = userService.userLogin(logInDTO);

        return SaResult.data(token);

    }


    /**
     * 用户退出登录接口
     * @return SaResult 返回操作结果，无数据返回
     */
    // 退出登录
    @Operation(summary = "用户退出登录")
    @PostMapping("/logout")
    public SaResult logout() {

        userService.logout();

        return SaResult.ok();
    }


    /**
     * 获取当前用户信息接口
     * 需要具有"system.userRole.getUserInfo"权限才能访问
     * @return SaResult 返回用户信息结果，数据部分为UserInfoVO对象
     */
    @Operation(summary = "获取当前用户信息")
    @GetMapping("/getUserInfo")
    @SaCheckPermission("system.userRole.getUserInfo")
    public SaResult getUserInfo() {

        UserInfoVO userInfoVO = userService.getUserRoleInfo();

        return SaResult.data(userInfoVO);
    }

}

